A print job, which may consist of one or more pages and which is to be printed on a printer, is typically sent to the printer in a form utilizing a page description language (PDL), such as PostScript™ or PDF of Adobe™, or PCL of HP™. In a typical page description language printer, the page description input is translated into high-level graphics objects. Each graphics object generally consists of a number of graphics primitives each typically comprising path data which indicates where the object is active on the page, fill data which indicates the colour of the object, and compositing data which indicates how the object will interact with any objects below. The graphics primitives are stored in an intermediate format known as a display list. A completed display list is then sent to a renderer for rendering to a page of pixel data destined for a printer engine.
Common types of fills are flat colours, bitmaps, and linear and radial shadings. A bitmap fill generally consists of source bitmap data, which is specified in a source coordinate system, and an affine transformation, which maps between the source coordinate system and the output page coordinate system.
A job may potentially contain a very large number of graphics objects, each referencing a path and an individual bitmap fill. In this case, the memory required to store the display list could be a significant fraction of the total job memory. Since memory represents a substantial cost, it is desirable to reduce the memory used by the display list without significantly decreasing the rendered page quality.
One known method for reducing the display list memory is to convert the display list into an intermediate format known as a fillmap. A fillmap consists of non-overlapping regions. Each region references a sequence of one or more fills, which are derived from the objects which are active in the given region. Neighbouring regions can be combined if the regions reference the same sequence of fills. In general, the memory required to store the intermediate format is related to the number of regions. However, if there are a large number of display list objects with a large number of individual fills, it is likely that there will be a large number of regions in the intermediate format. By converting the display list to a fillmap intermediate format, the memory required to store the path data for each object can be freed. However, the memory required to store the fill data may remain high.
A method of reducing the memory required for bitmap fills associated with a number of images is to combine the fills by rendering the fills into a consolidated image. Rendering the images involves compositing operations to be performed. In order to render objects which are transparent or which are composited with underlying objects, the underlying objects must also be rendered. This means that in the worst case, the entire display list must be rendered, and this processing is expensive both computationally and in memory usage.
Thus, a need exists to reduce the amount of memory used by the intermediate format.